css: Handle some more simple cases of dependencies
authorMatthias Clasen <mclasen@redhat.com>
Sat, 25 Aug 2012 15:22:14 +0000 (11:22 -0400)
committerBenjamin Otte <otte@redhat.com>
Tue, 28 Aug 2012 13:42:24 +0000 (15:42 +0200)
gtk/gtkcssarrayvalue.c
gtk/gtkcssbgsizevalue.c
gtk/gtkcssshadowsvalue.c
gtk/gtkcssshadowvalue.c

index 418ac655981ac7dee8af136d8a844100cbad3ae0..69f81bf7f4b2cfac7db343a3bea11c65dcc10cc7 100644 (file)
@@ -49,16 +49,18 @@ gtk_css_value_array_compute (GtkCssValue        *value,
   GtkCssValue *result;
   gboolean changed = FALSE;
   guint i;
+  GtkCssDependencies child_deps;
 
   if (value->n_values == 0)
     return _gtk_css_value_ref (value);
 
-  *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
-
   result = _gtk_css_array_value_new_from_array (value->values, value->n_values);
   for (i = 0; i < value->n_values; i++)
     {
-      result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, NULL);
+      result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, &child_deps);
+
+      *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
+
       changed |= (result->values[i] != value->values[i]);
     }
 
index 2bff385b9f3ade956633afe7f8aa58d080bc3130..349a986f6c98740c9765754ae929638a08171883 100644 (file)
@@ -46,13 +46,25 @@ gtk_css_value_bg_size_compute (GtkCssValue        *value,
                                GtkStyleContext    *context,
                                GtkCssDependencies *dependencies)
 {
+  GtkCssValue *x, *y;
+  GtkCssDependencies x_deps, y_deps;
+
   if (value->x == NULL && value->y == NULL)
     return _gtk_css_value_ref (value);
 
-  *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+  x_deps = y_deps = 0;
+  x = y = NULL;
+
+  if (value->x)
+    x = _gtk_css_value_compute (value->x, property_id, context, &x_deps);
+
+  if (value->y)
+    y = _gtk_css_value_compute (value->y, property_id, context, &y_deps);
+
+  *dependencies = _gtk_css_dependencies_union (x_deps, y_deps);
 
-  return _gtk_css_bg_size_value_new (value->x ? _gtk_css_value_compute (value->x, property_id, context, NULL) : NULL,
-                                     value->y ? _gtk_css_value_compute (value->y, property_id, context, NULL) : NULL);
+  return _gtk_css_bg_size_value_new (value->x ? x : NULL,
+                                     value->y ? y : NULL);
 }
 
 static gboolean
index ce37d86b4d8d411bbeeff24abaaf1c85455c2a51..78e092a6b14ed986dae7b0a74d47d80757f2eb2a 100644 (file)
@@ -54,17 +54,17 @@ gtk_css_value_shadows_compute (GtkCssValue        *value,
                                GtkCssDependencies *dependencies)
 {
   GtkCssValue *result;
+  GtkCssDependencies child_deps;
   guint i;
 
   if (value->len == 0)
     return _gtk_css_value_ref (value);
 
-  *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
-
   result = gtk_css_shadows_value_new (value->values, value->len);
   for (i = 0; i < value->len; i++)
     {
-      result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, NULL);
+      result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, &child_deps);
+      *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
     }
 
   return result;
index 9b2d897aea4ac00fc9a8e305ece90cda995eb11e..bdfa8d25d4010a09c72aaaa3dc292577a7e21832 100644 (file)
@@ -65,14 +65,30 @@ gtk_css_value_shadow_compute (GtkCssValue        *shadow,
                               GtkStyleContext    *context,
                               GtkCssDependencies *dependencies)
 {
-  *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
-
-  return gtk_css_shadow_value_new (_gtk_css_value_compute (shadow->hoffset, property_id, context, NULL),
-                                   _gtk_css_value_compute (shadow->voffset, property_id, context, NULL),
-                                   _gtk_css_value_compute (shadow->radius, property_id, context, NULL),
-                                   _gtk_css_value_compute (shadow->spread, property_id, context, NULL),
-                                   shadow->inset,
-                                   _gtk_css_value_compute (shadow->color, property_id, context, NULL));
+  GtkCssValue *hoffset, *voffset, *radius, *spread, *color;
+  GtkCssDependencies child_deps;
+
+  child_deps = 0;
+  hoffset = _gtk_css_value_compute (shadow->hoffset, property_id, context, &child_deps);
+  *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
+
+  child_deps = 0;
+  voffset = _gtk_css_value_compute (shadow->voffset, property_id, context, &child_deps);
+  *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
+
+  child_deps = 0;
+  radius = _gtk_css_value_compute (shadow->radius, property_id, context, &child_deps);
+  *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
+
+  child_deps = 0;
+  spread = _gtk_css_value_compute (shadow->spread, property_id, context, &child_deps),
+  *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
+
+  child_deps = 0;
+  color = _gtk_css_value_compute (shadow->color, property_id, context, &child_deps);
+  *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
+
+  return gtk_css_shadow_value_new (hoffset, voffset, radius, spread, shadow->inset, color);
 }
 
 static gboolean